package class5;

//实体类的核心特征

//私有成员变量
//实体类的成员变量（字段）通常用 private 修饰，确保数据的封装性，避免外部直接修改。

//公共的 getter/setter 方法
//为每个私有成员变量提供 public 的 getter（获取值）和 setter（设置值）方法，用于外部间接访问和修改数据。setter 方法中还可添加数据校验逻辑（如非空判断、范围限制等）。

//无参构造方法
//通常需要显式定义无参构造方法（若定义了有参构造，Java 不会自动生成无参构造），便于反射机制（如 JSON 解析、ORM 框架）创建对象。

//重写 toString () 方法
//用于方便地打印对象的属性信息，替代默认的内存地址形式输出。

//重写 equals () 和 hashCode () 方法
//当需要判断两个实体对象是否 “相等”（基于属性值）时，需重写这两个方法（尤其在使用集合框架时）。

public class student//一个代码文件中可以写多个class，但是只能有一个public class并且文件名与类名相同
{
    public student() {
    }

    public student(String name, int age, int number) {
        this.name = name;
        this.age = age;
        this.number = number;
    }

    private String name;
    private int age;
    private int number;
    //在Java类中，未显式初始化的成员变量（字段）会由JVM自动赋予默认初始值:
    //整数类型（byte、short、int、long）：默认值为 0
    //浮点类型（float、double）：默认值为 0.0
    //字符类型（char）：默认值为 '\u0000'（空字符，控制台输出可能显示为空白）
    //布尔类型（boolean）：默认值为 false
    //类、接口、数组、枚举等（如String、Object、自定义类对象），默认值均为 null，表示不指向任何有效对象。

    //请注意局部变量没有默认值，必须显式初始化后才能使用，否则编译报错，而成员变量有默认值
    //还要注意局部变量储存在栈中，成员变量储存在堆中
    public void test()
    {
        this.Printage();//this代表当前对象的引用，可以省略
        this.Printname();//这就是this指针
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public void Printname()
    {
        System.out.println(name);
    }

    public void Printage()
    {
        System.out.println(age);
    }

}
